# 正常情况下我们会遇到一些有参数和有返回值的函数
# 以下装饰器的实现就是针对有参数和返回值的函数
import time


def log(f):
    def inner(*args, **kwargs):     # 形参：不定长参数负责接收普通函数的参数
        start = time.time()
        result = f(*args, **kwargs)   # 这里有两点:1.实参接受形参 进行解包
        # result = f(*args, **kwargs)  # 这里有两点:2. result 用来接受普通函数的返回值
        end = time.time()
        print("{}执行时间为{}".format(f.__name__, (start-end)))
        return result       # 返回普通函数的返回值
    return inner


@log
def fun(a, b):
    return a + b

print(fun(3, 5))

